/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.rm.beans;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.rm.entidades.Partida;
import org.rm.entidades.jpa.PartidaJpaController;
import org.rm.entidades.jpa.exceptions.NonexistentEntityException;

/**
 * Clase para gestionar las partidas
 * @author ffbeltran
 */
public class ControladorPartida extends ControladorEspecifico {
    
    private String nombrePartida;

    /**
     * Método para crear una nueva partida. Recupera el nombre introducido por
     * el usuario ({@link #getNombrePartida() }), crea un nuevo objeto
     * {@link Partida} y llama a {@link PartidaJpaController#create(org.rm.entidades.Partida) }
     * con la nueva instancia creada. A continuación modifica el mapa de partidas
     * de {@code form}      *
     * @return la cadena 'partidas'
     * @see FormularioBean#getMapaPartidas()
     * @see ControladorEspecifico
     */
    public String nuevaPartida() {
        Partida nuevaPartida = new Partida();
        nuevaPartida.setNombre(nombrePartida);
        PartidaJpaController.create(nuevaPartida);
        form.getMapaPartidas().put(nuevaPartida.getId(), nuevaPartida);
        nombrePartida = "";
        return "partidas";
    }

    /**
     * Método para modificar una partida. Debe recibir un parámetro 'id' que
     * indica el identificador de la partida que se modifica. Recupera el
     * objeto partida a través del método {@link FormularioBean#getPartida(java.lang.Integer) }
     * de su instancia {@code form}. A continuación llama a
     * {@link PartidaJpaController#edit(org.rm.entidades.Partida) } con la instancia
     * recuperada.
     * @return la cadena 'partidas'
     * @see ControladorEspecifico
     */
    public String modificaPartida() {
        Integer id = Integer.valueOf(ControladorUtil.getParam("id"));
        Partida p = form.getPartida(id);
        if (p != null) {
            try {
                PartidaJpaController.edit(p);
            } catch (NonexistentEntityException ex) {
                ex.printStackTrace();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        return "partidas";
    }

    /**
     * Método getter del atributo {@code nombrePartida} utilizado para que el
     * usuario pueda especificar un nombre para una partida nueva
     * @return el valor del atributo
     */
    public String getNombrePartida() {
        return nombrePartida;
    }

    /**
     * Método setter del atributo {@code nombrePartida} utilizado para que el
     * usuario pueda especificar un nombre para una partida nueva
     * @param nombrePartida
     */
    public void setNombrePartida(String nombrePartida) {
        this.nombrePartida = nombrePartida;
    }

    /**
     * Devuelve la lista de partidas disponible a través del mapa de partidas
     * de {@code form}
     * @return lista de partidas en la sesión
     * @see FormularioBean#getMapaPartidas() 
     */
    public List<Partida> getPartidas() {
        List<Partida> listaPartidas = new ArrayList<Partida>();
        Map<Integer, Partida> partidas = form.getMapaPartidas();
        for (Integer idPartida : partidas.keySet()) {
            listaPartidas.add(partidas.get(idPartida));
        }
        return listaPartidas;
    }
}
